package br.com.rcbsystens.promotora.model.entidades.pessoa;

import java.io.Serializable;
import java.util.List;

import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

import br.com.rcbsystens.promotora.model.entidades.Emails;
import br.com.rcbsystens.promotora.model.entidades.Enderecos;
import br.com.rcbsystens.promotora.model.entidades.ReferenciaBancaria;
import br.com.rcbsystens.promotora.model.entidades.Referencias;
import br.com.rcbsystens.promotora.model.entidades.Telefones;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Pessoa implements Serializable{

	private static final long serialVersionUID = -8570503901548764773L;

	@Id @GeneratedValue
	private long id;
	@ElementCollection 
	private List<Enderecos> enderecos;
	@ElementCollection
	private List<Telefones> telefones;
	@ElementCollection
	private List<Referencias> referencias;
	@ElementCollection
	private List<ReferenciaBancaria> referenciaBancarias;
	@ElementCollection
	private List<Emails> emails;
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public List<Enderecos> getEnderecos() {
		return enderecos;
	}
	public void setEnderecos(List<Enderecos> enderecos) {
		this.enderecos = enderecos;
	}
	public List<Telefones> getTelefones() {
		return telefones;
	}
	public void setTelefones(List<Telefones> telefones) {
		this.telefones = telefones;
	}
	public List<Referencias> getReferencias() {
		return referencias;
	}
	public void setReferencias(List<Referencias> referencias) {
		this.referencias = referencias;
	}
	public List<ReferenciaBancaria> getReferenciaBancarias() {
		return referenciaBancarias;
	}
	public void setReferenciaBancarias(List<ReferenciaBancaria> referenciaBancarias) {
		this.referenciaBancarias = referenciaBancarias;
	}
	public List<Emails> getEmails() {
		return emails;
	}
	public void setEmails(List<Emails> emails) {
		this.emails = emails;
	}
	
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((emails == null) ? 0 : emails.hashCode());
		result = prime * result
				+ ((enderecos == null) ? 0 : enderecos.hashCode());
		result = prime * result + (int) (id ^ (id >>> 32));
		result = prime
				* result
				+ ((referenciaBancarias == null) ? 0 : referenciaBancarias
						.hashCode());
		result = prime * result
				+ ((referencias == null) ? 0 : referencias.hashCode());
		result = prime * result
				+ ((telefones == null) ? 0 : telefones.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Pessoa other = (Pessoa) obj;
		if (emails == null) {
			if (other.emails != null)
				return false;
		} else if (!emails.equals(other.emails))
			return false;
		if (enderecos == null) {
			if (other.enderecos != null)
				return false;
		} else if (!enderecos.equals(other.enderecos))
			return false;
		if (id != other.id)
			return false;
		if (referenciaBancarias == null) {
			if (other.referenciaBancarias != null)
				return false;
		} else if (!referenciaBancarias.equals(other.referenciaBancarias))
			return false;
		if (referencias == null) {
			if (other.referencias != null)
				return false;
		} else if (!referencias.equals(other.referencias))
			return false;
		if (telefones == null) {
			if (other.telefones != null)
				return false;
		} else if (!telefones.equals(other.telefones))
			return false;
		return true;
	}
	
	
	
}
